//
//  Define.h
//  IOS_SST
//
//  Created by lfy on 16/4/25.
//  Copyright © 2016年 jiahua. All rights reserved.
//

#ifndef Define_h
#define Define_h

typedef unsigned char         u8;
typedef unsigned short        u16;
typedef unsigned int         u32;

#define TIME_OUT                    2               // UDP time out

#define MAX_DEVICE_COUNT            10              //APP 支持的最大家电数

#define DISCUSS_CMD_SEND            0               //发送秘钥协商
#define DISCUSS_CMD_RECV            1               //收到秘钥协商
#define CMD_DATA                    6               //正常业务数据
#define CMD_ERROR                   0xff            //CMD错误

#define CLOUD_PUBLIC_KEY_LEN        256
#define CLOUD_PRIVATE_KEY_LEN       256
#define DEVICE_PUBLIC_KEY_LEN       128
#define DEVICE_PRIVATE_KEY_LEN      128

#define SECRET_DATA_LEN             2048
#define RANDOM_ONE_LEN              16              //随机数R1长度
#define RANDOM_TWO_LEN              16              //随机数R2长度
#define CLOUD_ASYM_ENCRYPT_LEN      256             //Hello数据的密文长度
#define HELLO_DATA_FIFO_MAX         2               //Hello预计算数据存储队列大小
#define SECRET_RESERVE_LEN          105

#define HASH_DIGEST_LEN             32              //SHA-256
#define SYM_KEY_LEN                 32              //AES-256算法的密钥长度
#define SYM_BLOCK_LEN               16              //AES-256明文块长度

#define RECOVER_SAP_TIMES           5               //SAP恢复时连接TFP2的次数
#define LICENSE_MAC_LEN             6               //MAC长度
#define LICENSE_RANDOM_LEN          32              //随机数长度
#define LICENSE_LEN                 256             //License长度
#define LICENSE_INIT_KEY_LEN        32              //初始化密钥长度
#define LICENSE_KEY_LEN             32              //License保护密钥长度
#define LICENSE_VERIFY_LEN          32              //License验证结果长度
#define LAN_KEY_LEN                 32              //局域网密钥长度
#define UDP_KEY_ID_LEN              16              //UDP密钥索引AnswerCloud
#define TOKEN_LENGTH                64              //Token 长度

#define  NOENCRYPT_TAG              88888888        //用来表示从云端获取Token的时候，不加密直接打包发送的标记
#define  DISCUSS_SEND_TAG           0XFFFFFFFF        //用来表示本机生成R3作为秘钥，加密k1发送出去

//SST Head
#define SST_SEC_TOKEN               0x8370
#define	SST_SEC_SIZE                1024		        //缓冲区最大长度为512
#define	SST_HEAD_SIZE               8                       //头部长度
#define SST_CNT_POS                 6                       //计数器位置
#define SST_HASH_SIZE               32                      //密文HASH长度
#define	SST_CONT_SIZE               976		        //1024-8-32＝506

#define SST_CMD_REQUEST             0x00                    //密钥协商请求
#define SST_CMD_ANSWER              0x01                    //密钥协商应答
#define SST_CMD_FINISH              0x02                    //密钥协商完成
#define SST_CMD_TCP_DATA            0x03                    //TCP数据传输
#define SST_CMD_UDP_DATA            0x04                    //UDP数据传输
#define SST_CMD_SEC_DATA            0x05                    //私密数据传输
#define SST_CMD_LAN_DATA            0x06                    //局域网数据传输
#define SST_CMD_NO_SEC              0xff                    //明文传输

#endif /* Define_h */
